home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / linux / phonet.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  4.1 KB  |  172 lines

  1. /**
  2.  * file phonet.h
  3.  *
  4.  * Phonet sockets kernel interface
  5.  *
  6.  * Copyright (C) 2008 Nokia Corporation. All rights reserved.
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * version 2 as published by the Free Software Foundation.
  11.  *
  12.  * This program is distributed in the hope that it will be useful, but
  13.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.  * 02110-1301 USA
  21.  */
  22.  
  23. #ifndef LINUX_PHONET_H
  24. #define LINUX_PHONET_H
  25.  
  26. /* Automatic protocol selection */
  27. #define PN_PROTO_TRANSPORT    0
  28. /* Phonet datagram socket */
  29. #define PN_PROTO_PHONET        1
  30. /* Phonet pipe */
  31. #define PN_PROTO_PIPE        2
  32. #define PHONET_NPROTO        3
  33.  
  34. /* Socket options for SOL_PNPIPE level */
  35. #define PNPIPE_ENCAP        1
  36. #define PNPIPE_IFINDEX        2
  37.  
  38. #define PNADDR_ANY        0
  39. #define PNPORT_RESOURCE_ROUTING    0
  40.  
  41. /* Values for PNPIPE_ENCAP option */
  42. #define PNPIPE_ENCAP_NONE    0
  43. #define PNPIPE_ENCAP_IP        1
  44.  
  45. /* ioctls */
  46. #define SIOCPNGETOBJECT        (SIOCPROTOPRIVATE + 0)
  47.  
  48. /* Phonet protocol header */
  49. struct phonethdr {
  50.     __u8    pn_rdev;
  51.     __u8    pn_sdev;
  52.     __u8    pn_res;
  53.     __be16    pn_length;
  54.     __u8    pn_robj;
  55.     __u8    pn_sobj;
  56. } __attribute__((packed));
  57.  
  58. /* Common Phonet payload header */
  59. struct phonetmsg {
  60.     __u8    pn_trans_id;    /* transaction ID */
  61.     __u8    pn_msg_id;    /* message type */
  62.     union {
  63.         struct {
  64.             __u8    pn_submsg_id;    /* message subtype */
  65.             __u8    pn_data[5];
  66.         } base;
  67.         struct {
  68.             __u16    pn_e_res_id;    /* extended resource ID */
  69.             __u8    pn_e_submsg_id;    /* message subtype */
  70.             __u8    pn_e_data[3];
  71.         } ext;
  72.     } pn_msg_u;
  73. };
  74. #define PN_COMMON_MESSAGE    0xF0
  75. #define PN_COMMGR        0x10
  76. #define PN_PREFIX        0xE0 /* resource for extended messages */
  77. #define pn_submsg_id        pn_msg_u.base.pn_submsg_id
  78. #define pn_e_submsg_id        pn_msg_u.ext.pn_e_submsg_id
  79. #define pn_e_res_id        pn_msg_u.ext.pn_e_res_id
  80. #define pn_data            pn_msg_u.base.pn_data
  81. #define pn_e_data        pn_msg_u.ext.pn_e_data
  82.  
  83. /* data for unreachable errors */
  84. #define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP    0x01
  85. #define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP    0x14
  86. #define pn_orig_msg_id        pn_data[0]
  87. #define pn_status        pn_data[1]
  88. #define pn_e_orig_msg_id    pn_e_data[0]
  89. #define pn_e_status        pn_e_data[1]
  90.  
  91. /* Phonet socket address structure */
  92. struct sockaddr_pn {
  93.     sa_family_t spn_family;
  94.     __u8 spn_obj;
  95.     __u8 spn_dev;
  96.     __u8 spn_resource;
  97.     __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3];
  98. } __attribute__ ((packed));
  99.  
  100. static inline __u16 pn_object(__u8 addr, __u16 port)
  101. {
  102.     return (addr << 8) | (port & 0x3ff);
  103. }
  104.  
  105. static inline __u8 pn_obj(__u16 handle)
  106. {
  107.     return handle & 0xff;
  108. }
  109.  
  110. static inline __u8 pn_dev(__u16 handle)
  111. {
  112.     return handle >> 8;
  113. }
  114.  
  115. static inline __u16 pn_port(__u16 handle)
  116. {
  117.     return handle & 0x3ff;
  118. }
  119.  
  120. static inline __u8 pn_addr(__u16 handle)
  121. {
  122.     return (handle >> 8) & 0xfc;
  123. }
  124.  
  125. static inline void pn_sockaddr_set_addr(struct sockaddr_pn *spn, __u8 addr)
  126. {
  127.     spn->spn_dev &= 0x03;
  128.     spn->spn_dev |= addr & 0xfc;
  129. }
  130.  
  131. static inline void pn_sockaddr_set_port(struct sockaddr_pn *spn, __u16 port)
  132. {
  133.     spn->spn_dev &= 0xfc;
  134.     spn->spn_dev |= (port >> 8) & 0x03;
  135.     spn->spn_obj = port & 0xff;
  136. }
  137.  
  138. static inline void pn_sockaddr_set_object(struct sockaddr_pn *spn,
  139.                         __u16 handle)
  140. {
  141.     spn->spn_dev = pn_dev(handle);
  142.     spn->spn_obj = pn_obj(handle);
  143. }
  144.  
  145. static inline void pn_sockaddr_set_resource(struct sockaddr_pn *spn,
  146.                         __u8 resource)
  147. {
  148.     spn->spn_resource = resource;
  149. }
  150.  
  151. static inline __u8 pn_sockaddr_get_addr(const struct sockaddr_pn *spn)
  152. {
  153.     return spn->spn_dev & 0xfc;
  154. }
  155.  
  156. static inline __u16 pn_sockaddr_get_port(const struct sockaddr_pn *spn)
  157. {
  158.     return ((spn->spn_dev & 0x03) << 8) | spn->spn_obj;
  159. }
  160.  
  161. static inline __u16 pn_sockaddr_get_object(const struct sockaddr_pn *spn)
  162. {
  163.     return pn_object(spn->spn_dev, spn->spn_obj);
  164. }
  165.  
  166. static inline __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn)
  167. {
  168.     return spn->spn_resource;
  169. }
  170.  
  171. #endif
  172.